﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;

namespace FirstApp
{
        public partial class Szczegoly : Form
        {
                int IdKlienta;
                Klient klient;
                List<Adres> adresy;
                List<Adres> adresyOryginal;
                Adres adres;
                bool blad = false;
                public Szczegoly(int ID)
                {

                        InitializeComponent();
                        IdKlienta = ID;
                        klient = new Klient(IdKlienta);
                        adresyOryginal = klient.PobierzAdesy();
                        inicjalizacja();
                }

                private void inicjalizacja()
                {
                        buttonZapisz.Visible = false;
                        buttonAnulujZmiany.Visible = false;
                        buttonDodajAdres.Visible = false;
                        buttonUsunAdres.Visible = false;
                        labelEmailValidator.Visible = false;
                        //ID = 29816;
                        //label2.Text = IdKlienta.ToString();
                        klient = new Klient(IdKlienta);
                        TxtNazwaFirmy.Text = klient.NazwaFirmy;
                        TxtImiePrzedstawiciela.Text = klient.ImiePrzedstawiciela;
                        TxtNazwiskoPrzedstawiciela.Text = klient.NazwiskoPrzedstawiciela;
                        TxtAdresEmail.Text = klient.Email;
                        TxtNumerTelefonu.Text = klient.Telefon;
                        adresy = klient.PobierzAdesy();
                        dataGridView1.DataSource = adresy;
                        dataGridView1.Columns[0].Visible = false;
                }

                private void buttonEdytuj_Click(object sender, EventArgs e)
                {
                        foreach (Control control in base.Controls)
                        {
                                if (control is TextBox)
                                {
                                        TextBox t = (TextBox)control;
                                        t.ReadOnly = false;
                                }
                                else if (control is Button)
                                {
                                        Button b = (Button)control;
                                        b.Visible = false;
                                }
                        }
                        dataGridView1.ReadOnly = false;
                        buttonZapisz.Visible = true;
                        buttonDodajAdres.Visible = true;
                        buttonUsunAdres.Visible = true;
                        buttonAnulujZmiany.Visible = true;

                }

                private void button1_Click(object sender, EventArgs e)
                {
                        blad = false;

                        foreach (Adres adr in adresy)
                        {
                                if (adr.KodPocztowy == null || adr.Miasto == null || adr.Panstwo == null || adr.Stan == null || adr.Ulica == null) blad = true;
                        }
                        if (TxtAdresEmail.Text.Trim() == "" || TxtImiePrzedstawiciela.Text.Trim() == "" || TxtNazwaFirmy.Text.Trim() == "" || TxtNazwiskoPrzedstawiciela.Text.Trim() == "" || TxtNumerTelefonu.Text.Trim() == "") blad = true;
                        if (blad) MessageBox.Show("Wszystkie pola muszą być wypełnione!");
                        else
                        {
                                try
                                {
                                        klient.NazwaFirmy = TxtNazwaFirmy.Text;
                                        klient.ImiePrzedstawiciela = TxtImiePrzedstawiciela.Text;
                                        klient.NazwiskoPrzedstawiciela = TxtNazwiskoPrzedstawiciela.Text;
                                        klient.Email = TxtAdresEmail.Text;
                                        klient.Telefon = TxtNumerTelefonu.Text;
                                        klient.Zapisz();

                                        List<Adres> ListaAktualizacja = new List<Adres>();
                                        List<Adres> ListaNowe = new List<Adres>();

                                        foreach (Adres adr in adresy)
                                        {
                                                if (adr.Id == 0) ListaNowe.Add(adr);
                                                else ListaAktualizacja.Add(adr);
                                        }

                                        foreach (Adres adr in ListaAktualizacja)
                                        {
                                                adr.Aktualizuj();
                                        }
                                        foreach (Adres adr in ListaNowe)
                                        {
                                                klient.DodajAdres(adr);
                                        }

                                        //test

                                        List<Adres> ListaUsuniete = adresyOryginal.Where(x => !ListaAktualizacja.Any(x1 => x1.Id == x.Id)).ToList();

                                        foreach (Adres adr in ListaUsuniete)
                                        {
                                                klient.UsunAdres(adr);
                                        }

                                        foreach (Control control in base.Controls)
                                        {
                                                if (control is TextBox)
                                                {
                                                        TextBox t = (TextBox)control;
                                                        t.ReadOnly = true;
                                                }
                                                else if (control is Button)
                                                {
                                                        Button b = (Button)control;
                                                        b.Visible = true;
                                                }
                                        }
                                        dataGridView1.ReadOnly = true;
                                        buttonZapisz.Visible = false;
                                        buttonDodajAdres.Visible = false;
                                        buttonUsunAdres.Visible = false;
                                        buttonAnulujZmiany.Visible = false;

                                        MessageBox.Show("Edycja wykonana poprawie");
                                }
                                catch (Exception)
                                {
                                        MessageBox.Show("Błąd podczas edycji");
                                }
                        }
                }

                private void buttonDodajAdres_Click(object sender, EventArgs e)
                {
                        if (0 == adresy.Count())
                        {
                                adresy.Add(new Adres(0, "nowy"));
                                dataGridView1.DataSource = null;
                                dataGridView1.DataSource = adresy;
                                dataGridView1.Columns[0].Visible = false;
                        }
                        else
                        {
                                adres = adresy.Last();
                                if (adres.KodPocztowy == "" || adres.Miasto == "" || adres.Panstwo == "" || adres.Stan == "" || adres.Ulica == "") MessageBox.Show("Musisz uzupełnić wszystkie dane aby dodać nowy adres!");
                                else
                                {
                                        adresy.Add(new Adres(adresy.Last().Id - 1, "nowy"));
                                        dataGridView1.DataSource = null;
                                        dataGridView1.DataSource = adresy;
                                        dataGridView1.Columns[0].Visible = false;
                                }
                        }

                }

                private void buttonUsunAdres_Click(object sender, EventArgs e)
                {
                        if (dataGridView1.SelectedRows.Count != 1) MessageBox.Show("Musisz wybrać pojedynczy wiesz określający adres");
                        else
                        {
                                int IdAdresu = Convert.ToInt32(dataGridView1.SelectedRows[0].Cells[0].Value);
                                adresy.Remove(adresy.Where(x => x.Id == IdAdresu).First());
                                dataGridView1.DataSource = null;
                                dataGridView1.DataSource = adresy;
                                dataGridView1.Columns[0].Visible = false;
                        }
                }

                private void buttonAnulujZmiany_Click(object sender, EventArgs e)
                {
                        inicjalizacja();
                }
                public bool TestEmailRegex(string emailAddress)
                {
                        string patternStrict = @"^(([^<>()[\]\\.,;:\s@\""]+"
                              + @"(\.[^<>()[\]\\.,;:\s@\""]+)*)|(\"".+\""))@"
                              + @"((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"
                              + @"\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+"
                              + @"[a-zA-Z]{2,}))$";
                        Regex reStrict = new Regex(patternStrict);
                        bool isStrictMatch = reStrict.IsMatch(emailAddress);
                        return isStrictMatch;

                }

                private void TxtAdresEmail_Leave(object sender, EventArgs e)
                {
                        if (!TestEmailRegex(TxtAdresEmail.Text))
                        {
                                blad = true;
                                labelEmailValidator.Visible = true;
                        }
                        else
                        {
                                blad = false;
                                labelEmailValidator.Visible = false;
                        }
                }

        }
}
